En omfattande guide till JavaScripts nullish coalescing-operator (??) och dess roll i moderna strategier för tilldelning av standardvÀrden. Utforska anvÀndningsfall, fördelar och bÀsta praxis.
JavaScript Nullish Coalescing: BemÀstra tilldelning av standardvÀrden
JavaScript-utvecklare behöver ofta tilldela standardvÀrden nÀr en variabel Àr null eller undefined. Före ES2020 var den logiska ELLER-operatorn (||) den primÀra metoden för att uppnÄ detta. Införandet av nullish coalescing-operatorn (??) erbjuder dock en mer precis och tillförlitlig lösning. Denna omfattande guide utforskar nyanserna i nullish coalescing, dess fördelar och praktiska exempel för att hjÀlpa dig bemÀstra denna kraftfulla funktion.
FörstÄ Nullish Coalescing (??)
Nullish coalescing-operatorn (??) Àr en logisk operator som returnerar sin högra operand nÀr dess vÀnstra operand Àr null eller undefined. Annars returnerar den sin vÀnstra operand.
Syntax:
leftOperand ?? rightOperand
Huvudskillnad frÄn logiskt ELLER (||):
Den logiska ELLER-operatorn (||) returnerar den högra operanden om den vÀnstra operanden Àr ett falsy-vÀrde (null, undefined, 0, '', NaN, false). Detta kan leda till ovÀntat beteende nÀr du endast avser att hantera null- eller undefined-vÀrden.
Varför anvÀnda Nullish Coalescing?
Nullish coalescing erbjuder flera fördelar jÀmfört med den traditionella logiska ELLER-operatorn:
- Precision: Den riktar sig specifikt mot
nullochundefined, och undviker oavsiktliga standardtilldelningar för andra falsy-vÀrden. - LÀsbarhet: Den kommunicerar tydligt avsikten att endast hantera
null- ellerundefined-fall, vilket förbÀttrar kodens underhÄllbarhet. - SÀkerhet: Den förhindrar ovÀntat beteende som orsakas av att falsy-vÀrden oavsiktligt utlöser standardtilldelningar.
Praktiska exempel
1. GrundlÀggande tilldelning av standardvÀrden
Tilldela ett standardvÀrde till en variabel om den Àr null eller undefined:
const userName = user.name ?? 'Guest';
console.log(userName); // Utskrift: 'Guest' om user.name Àr null eller undefined, annars det faktiska anvÀndarnamnet
2. Hantering av API-svar
HÀmta data frÄn ett API och tillhandahÄlla ett standardvÀrde om svaret saknar en specifik egenskap:
const apiResponse = {
data: {
city: null,
},
};
const cityName = apiResponse.data.city ?? 'Unknown City';
console.log(cityName); // Utskrift: 'Unknown City'
3. Standardkonfigurationer
StÀlla in standardkonfigurationsalternativ för en komponent eller modul:
const config = {
theme: userSettings.theme,
animationSpeed: userSettings.animationSpeed ?? 'normal',
};
console.log(config.animationSpeed); // Utskrift: 'normal' om userSettings.animationSpeed Àr null eller undefined
4. Hantering av anvÀndarinstÀllningar
TillÄta anvÀndare att anpassa instÀllningar och tillhandahÄlla standardvÀrden om de inte har angett en preferens:
let userVolume = localStorage.getItem('volume'); // kan returnera null
let volume = userVolume ?? 0.5; // sÀtt en standardvolym pÄ 0.5
console.log(`User volume is ${volume}`);
5. Kedjning av Nullish Coalescing
Du kan kedja nullish coalescing-operatorn för att tillhandahÄlla en kaskad av standardvÀrden:
const setting = userSetting.displaySetting.theme ?? defaultSettings.theme ?? 'light';
console.log(setting); // Utskrift: Det första vÀrdet i kedjan som inte Àr null/undefined
6. Arbeta med funktioner
Tilldela en standardfunktion om den angivna funktionen Àr null eller undefined:
const logMessage = logger.log ?? (() => console.log('No logger available.'));
logMessage('This is a test message.');
Nullish Coalescing med Optional Chaining
Nullish coalescing-operatorn passar perfekt ihop med optional chaining (?.), vilket gör att du sÀkert kan komma Ät nÀstlade egenskaper utan att orsaka fel om en mellanliggande egenskap Àr null eller undefined.
Exempel:
const user = {
profile: {
address: {
city: null,
},
},
};
const cityName = user?.profile?.address?.city ?? 'Unknown City';
console.log(cityName); // Utskrift: 'Unknown City'
I detta exempel, om nÄgon av egenskaperna (user, profile, address, eller city) Àr null eller undefined, kommer optional chaining att kortslutas, och nullish coalescing-operatorn kommer att returnera standardvÀrdet 'Unknown City'.
Vanliga anvÀndningsfall i globala applikationer
TÀnk pÄ dessa internationella scenarier dÀr nullish coalescing kan vara sÀrskilt anvÀndbart:
- Lokalisering: TillhandahÄlla standardöversÀttningar baserat pÄ anvÀndarens locale. Om en översÀttning inte Àr tillgÀnglig för ett specifikt sprÄk, kan en fallback till ett standardsprÄk (t.ex. engelska) implementeras.
- Valutaformatering: Visa valutavÀrden med lÀmplig formatering baserat pÄ anvÀndarens region. Om de regionala instÀllningarna inte Àr tillgÀngliga kan ett standardvalutaformat tillÀmpas.
- Datum- och tidsformatering: Formatera datum och tider enligt anvÀndarens locale. Om locale-informationen saknas kan ett standardformat för datum och tid anvÀndas.
- Adressformatering: Visa adressinformation i rÀtt format för olika lÀnder. Om landet inte Àr specificerat kan ett standardadressformat anvÀndas.
Exempel: Fallback för lokalisering
const translatedText = localizedStrings[userLocale]?.greeting ?? localizedStrings['en-US'].greeting ?? "Hello!";
console.log(translatedText);
BĂ€sta praxis
- AnvÀnd
??förnull/undefined-kontroller: Föredra??framför||nÀr du specifikt vill hanteranull- ellerundefined-vÀrden. - Kombinera med optional chaining: AnvÀnd
??tillsammans med optional chaining (?.) för att sÀkert komma Ät nÀstlade egenskaper. - Undvik onödig komplexitet: HÄll din kod ren och lÀsbar genom att endast anvÀnda
??nÀr det ger en tydlig fördel. - TÀnk pÄ webblÀsarkompatibilitet: Se till att dina mÄlwebblÀsare stöder nullish coalescing-operatorn (ES2020). Om du behöver stödja Àldre webblÀsare, anvÀnd en transpiler som Babel.
- Kodgranskningar: Uppmuntra kodgranskningar för att sÀkerstÀlla korrekt anvÀndning av nullish coalescing-operatorn, sÀrskilt i stora internationella projekt dÀr feltolkningar av falsy-vÀrden kan fÄ betydande konsekvenser.
WebblÀsarkompatibilitet
Nullish coalescing-operatorn Àr en relativt ny funktion i JavaScript (ES2020). Se till att dina mÄlwebblÀsare stöder den, eller anvÀnd en transpiler som Babel för att ge kompatibilitet för Àldre webblÀsare. TÀnk pÄ anvÀndardemografin för din applikation. Till exempel kan ett projekt som riktar sig till anvÀndare i lÀnder med lÄngsammare teknikanpassning krÀva transpilering i högre grad Àn ett som riktar sig till anvÀndare i tekniskt framstÄende regioner.
FĂ€llor att undvika
- Blanda
??och||med&&: NÀr man kombinerar nullish coalescing-operatorn (??) eller den logiska ELLER-operatorn (||) med den logiska OCH-operatorn (&&) utan explicita parenteser, kastar JavaScript ett syntaxfel. AnvÀnd alltid parenteser för att förtydliga operationsordningen. - FörvÀxla
??med||: Kom ihÄg den avgörande skillnaden:??kontrollerar endast förnullochundefined, medan||kontrollerar för vilket falsy-vÀrde som helst.
Exempel pÄ fÀlla 1 (SyntaxError):
// Detta kommer att kasta ett SyntaxError:
// const value = a ?? b && c;
// RÀtt sÀtt (med parenteser):
const value = a ?? (b && c);
const value2 = (a ?? b) && c;
Alternativ till Nullish Coalescing (för Àldre webblÀsare)
Om du behöver stödja Àldre webblÀsare som inte stöder nullish coalescing-operatorn kan du anvÀnda följande alternativ:
- Logisk ELLER-operator (
||): Som nÀmnts tidigare Àr detta den traditionella metoden. Var dock medveten om problemet med falsy-vÀrden. - TernÀr operator: Ett mer ordrikt men explicit sÀtt att kontrollera för
nullellerundefined.
Exempel: TernÀr operator
const value = a === null || a === undefined ? defaultValue : a;
Slutsats
Nullish coalescing-operatorn (??) Àr ett vÀrdefullt tillskott till JavaScript-sprÄket, som ger ett mer precist och lÀsbart sÀtt att hantera tilldelning av standardvÀrden nÀr man hanterar null- eller undefined-vÀrden. Genom att förstÄ dess fördelar och nyanser kan du skriva renare, sÀkrare och mer underhÄllbar kod. Att kombinera den med optional chaining förbÀttrar ytterligare din förmÄga att hantera komplexa datastrukturer pÄ ett smidigt sÀtt. NÀr du bygger applikationer för en global publik, tÀnk pÄ konsekvenserna av null- och undefined-vÀrden i olika kulturella och regionala sammanhang, och utnyttja nullish coalescing för att ge en konsekvent och anvÀndarvÀnlig upplevelse för alla.